package com.agritech.strategy;

import com.agritech.environment.EnvironmentData;
import com.agritech.path.PathPlan;
import com.agritech.path.PathPoint;

/**
 * 最短路径规划策略
 * 实现路径规划策略接口，使用最短路径算法进行路径规划
 */
public class ShortestPathStrategy implements PathPlanningStrategy {
    
    @Override
    public PathPlan calculatePath(EnvironmentData environmentData, 
                                 double startX, double startY, 
                                 double endX, double endY, 
                                 double[][] obstacles) {
        System.out.println("使用最短路径算法计算从 (" + startX + ", " + startY + ") 到 (" + 
                endX + ", " + endY + ") 的路径");
        
        // 创建路径规划结果对象
        PathPlan pathPlan = new PathPlan();
        pathPlan.setPlanningMethod("最短路径算法");
        pathPlan.setHasObstacles(obstacles != null && obstacles.length > 0);
        
        // 添加起点
        PathPoint startPoint = new PathPoint(startX, startY, "起点");
        pathPlan.addPathPoint(startPoint);
        
        // 检查是否有障碍物
        if (obstacles != null && obstacles.length > 0) {
            System.out.println("检测到" + obstacles.length + "个障碍物");
            System.out.println("最短路径算法不考虑障碍物，可能导致路径不安全");
            System.out.println("建议使用A*算法或其他考虑障碍物的算法");
        }
        
        // 最短路径算法直接连接起点和终点（直线）
        // 在实际应用中，如果有障碍物，应该使用其他算法
        System.out.println("生成直线路径（最短路径）");
        
        // 添加终点
        PathPoint endPoint = new PathPoint(endX, endY, "终点");
        pathPlan.addPathPoint(endPoint);
        
        return pathPlan;
    }
    
    @Override
    public String getStrategyName() {
        return "最短路径算法";
    }
}